// #include<iostream>
// #include<string>
// #include<chrono>
//
// using namespace std;
// //++ -- 前置后置问题
// class Data {
// public:
//     Data(int num=0):num(num) {
//
//     }
//     Data operator++() {
//         cout<<"Data::operator++"<<endl;
//         return Data(++num);
//     }
//     //表示的是后缀重载
//     Data operator++(int) {
//         cout<<"Data::operator++(int)"<<endl;
//         return Data(num++);
//     }
//     void print() {
//         cout << num << endl;
//     }
// protected:
//     int num;
// };
// unsigned long long operator"" _h(unsigned long long num) {
//     return num * 60 * 60;
// }
// unsigned long long operator"" _m(unsigned long long  num) {
//     return num * 60;
// }
//
// unsigned long long operator"" _s(unsigned long long  num) {
//     return num;
// }
//
//
//
// //文本重载--后缀重载
//
// //流重载 必须要引用 把拷贝构造函数删除掉了
// //cout osstream的对象
// //cin istream类的对象
//
// void test_ostream_istream() {
//     ostream& out = cout; //cout <<
//     istream& in = cin;   // cin >>
//
//
// }
//
// class MM {
// public:
//     void print() {
//         cout<<"MM::print"<<endl;
//         cout << name << age << endl;
//     }
//     friend istream& operator>>(istream& in,MM& object);
//     friend ostream& operator<<(ostream& out, const MM& object);
//
//
// protected:
//     string name;
//     int age;
//     void operator_io() {
//         //cin >> a>>b
//         //cin.operator(a) -- cin
//         //cin>>b cin.operator(b);
//         MM obj;
//         cin >> obj;
//         cout << obj;
//     }
// };
// istream& operator>>(istream& in,MM& object) {
//     in >> object.name >> object.age;
//     return in;
// }
// ostream& operator<<(ostream& out, const MM& object) {
//     out << object.name << " " << object.age;
//     return out;
// }
//
// //重载new和delete
// class Test {
//     public:
//     Test() {
//         cout<<"Test::Test"<<endl;
//     }
//     ~Test() {
//         cout<<"Test::~Test"<<endl;
//     }
//
// protected:
//     public:
//     void * operator new[](size_t size){
//         cout<<"Test::operator new"<<endl;
//         void * ptr = malloc(size);
//         return ptr;
//     }
//
//     void operator delete[](void* p) {
//         free(p);
//     }
// };
//
//
// int main() {
//
//     Data data;
//     Data d1 = data++;
//     d1.print();
//     Data d2 = ++data;
//     d2.print();
//     1s;
//     1min;
//     1h;
//     1ns;
//     int n = 1_h + 30_m+30_s;
//     cout << n << endl;
//
//     cout << "-----------------" << endl;
//
//     Test* t = new (Test);
//     delete t;
//
//     Test * parr = new Test[3];
//     delete parr;
//
//
//
//
//
//     return 0;
// }